#ifndef __LCD_H__
#define __LCD_H__

#include <stdint.h>

/*******************************
 *         硬件抽象层(HAL)
 ******************************/
// 引脚类型定义
typedef struct {
    void (*set_output)(void);    // 设置为输出模式
    void (*set_high)(void);      // 输出高电平
    void (*set_low)(void);       // 输出低电平
} GPIO_TypeDef;

// 延时函数指针类型
typedef void (*delay_func)(uint32_t ms);

// LCD配置结构体
typedef struct {
    // 控制线
    GPIO_TypeDef RS;
    GPIO_TypeDef RW;
    GPIO_TypeDef EN;
    
    // 数据线（支持4/8位模式）
    GPIO_TypeDef DATA[8];
    
    // 延时函数
    delay_func delay_ms;
    delay_func delay_us;
    
    // 工作模式
    uint8_t data_bits;  // 4 or 8
} LCD_ConfigTypeDef;

/*******************************
 *         应用层(APL)
 ******************************/
// LCD操作句柄
typedef void* LCD_HandleTypeDef;

// LCD命令定义
typedef enum {
    LCD_CMD_CLEAR        = 0x01,
    LCD_CMD_HOME         = 0x02,
    LCD_CMD_ENTRY_MODE   = 0x04,
    LCD_CMD_DISPLAY_CTRL = 0x08,
    LCD_CMD_SHIFT        = 0x10,
    LCD_CMD_FUNCTION_SET = 0x20,
    LCD_CMD_CGRAM_ADDR   = 0x40,
    LCD_CMD_DDRAM_ADDR   = 0x80
} LCD_CommandTypeDef;

#endif // __LCD_H__